/*
 * 版权所有 (C) 2015 知启蒙(ZHIQIM) 保留所有权利。
 * 
 * 欢迎到知启蒙网站（https://www.zhiqim.com）购买正版软件，知启蒙还提供许多开源框架和软件。
 * 
 * 1、本软件产品所有源代码受《中华人民共和国著作权法》和其他有关法律、法规的保护，其所有知识产权归湖南知启蒙科技有限公司所有；
 * 2、禁止复制和修改。不得复制修改、翻译或改编本软件所有源代码，或者基于本软件产品创作衍生作品；
 * 3、禁止进行逆向工程。不得对本软件的源代码进行逆向工程、反编译或试图以其他方式发现软件的源代码；
 * 4、个别授权：如需进行商业性的销售、复制、分发，包括但不限于软件销售、预装、捆绑等，必须获得知启蒙的书面授权和许可；
 * 5、保留权利：本注释未明示授权的其他一切权利仍归知启蒙所有，任何人使用其他权利时必须获得知启蒙的书面同意。
*/
package net.redxyz.repost.resource.action;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;

import org.zhiqim.httpd.HttpRequest;
import org.zhiqim.httpd.HttpResponse;
import org.zhiqim.httpd.context.core.Action;
import org.zhiqim.kernel.logging.Log;
import org.zhiqim.kernel.logging.LogFactory;

/**
 * 下载快捷方式
 *
 * @version v7.0.1 @author zouzhigang 2021-7-29 新建与整理
 */
public class DownloadAction implements Action
{
    private static final Log log = LogFactory.getLog(DownloadAction.class);
    
    public void execute(HttpRequest request) throws Exception
    {
        String filePath = request.getRealPath("/conf/stortcut.url");
        String fileName = request.getContextName() + ".url";
        
        File file = new File(filePath);
        if(!file.isFile())
        {//文件不存在
            request.setAlertMsg("桌面快捷不存在，请重新下载");
            request.returnHistory();
            return;
        }
        
        BufferedInputStream bis=null;
        BufferedOutputStream  bos=null;
        
        try
        {
            HttpResponse response = request.getResponse();
            response.setHeader("Pragma", "public");
            response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");//IE6或IE7 HTTPS下载默认Cache缓存无权限，需cache进行配置和给其权限
            response.setContentType("application/octet-stream");
            response.setHeader("Content-disposition","attachment; filename="+fileName);
            bis =new BufferedInputStream(new FileInputStream(filePath));
            bos=new BufferedOutputStream(response.getOutputStream()); 
            byte[] buff = new byte[1024];
            int bytesRead;
            while(-1 != (bytesRead = bis.read(buff, 0, buff.length))) 
            {
                bos.write(buff,0,bytesRead);
            }
            bos.flush();
        }
        catch(Exception e)
        {
            log.error("桌面快捷下载异常" + e.getMessage(), e);
        }
        finally 
        {
            if (bis != null)bis.close();
            if (bos != null)bos.close();
        }
    }
}
